﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <functional>
#include <ctime>

/*
merge算法 容器元素合并，并存储到另一容器中,这两个容器必须有序且顺序相同
@param beg1 容器1开始迭代器
@param end1 容器1结束迭代器
@param beg2 容器2开始迭代器
@param end2 容器2结束迭代器
@param dest  目标容器开始迭代器
*/

/*
sort算法 容器元素排序
注意:两个容器必须是有序的
@param beg 容器1开始迭代器
@param end 容器1结束迭代器
@param _callback 回调函数或者谓词(返回bool类型的函数对象)
*/

//random_shuffle(iterator beg, iterator end)//洗牌算法

/*
reverse算法 反转指定范围的元素
@param beg 容器开始迭代器
@param end 容器结束迭代器
*/
//reverse(iterator beg, iterator end)

void testSortAlgorithms()
{
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; ++i)
	{
		v1.push_back(i);
		v2.push_back(i + 1);
	}

	vector<int>vTarget;
	vTarget.resize(v1.size() + v2.size());
	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
	for_each(vTarget.begin(), vTarget.end(), [](int v) {cout << v << " "; });
	cout << endl;
	//0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10

	vector<int>vs;
	vs.push_back(10);
	vs.push_back(40);
	vs.push_back(20);
	vs.push_back(90);
	vs.push_back(50);

	sort(vs.begin(), vs.end());
	for_each(vs.begin(), vs.end(), [](int v) {cout << v << " "; });//10 20 40 50 90
	cout << endl;

	sort(vs.begin(), vs.end(), greater<int>());
	for_each(vs.begin(), vs.end(), [](int v) {cout << v << " "; });//90 50 40 20 10
	cout << endl;

	random_shuffle(v1.begin(), v1.end());
	for_each(v1.begin(), v1.end(), [](int v) {cout << v << " "; });//8 1 9 2 0 5 7 3 4 6
	cout << endl;// --> 7 5 3 2 8 1 9 6 0 4

	reverse(v2.begin(), v2.end());
	for_each(v2.begin(), v2.end(), [](int v) {cout << v << " "; });//10 9 8 7 6 5 4 3 2 1
	cout << endl;
}

//main336：常用排序算法
int main336()
{
	srand((unsigned int)time(NULL));

	testSortAlgorithms();

	system("pause");
	return EXIT_SUCCESS;
}